/*
 * Offical Website:http://www.mob.com
 * Support QQ: 4006852216
 * Offical Wechat Account:ShareSDK   (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
 *
 * Copyright (c) 2013 mob.com. All rights reserved.
 */

package cn.sharesdk.onekeyshare.theme.classic;

import static com.mob.tools.utils.BitmapHelper.blur;
import static com.mob.tools.utils.BitmapHelper.captureView;
import static com.mob.tools.utils.R.dipToPx;
import static com.mob.tools.utils.R.getBitmapRes;
import static com.mob.tools.utils.R.getScreenWidth;
import static com.mob.tools.utils.R.getStringRes;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Handler.Callback;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import cn.sharesdk.framework.CustomPlatform;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.TitleLayout;

import com.mob.tools.utils.UIHandler;
import cn.sharesdk.onekeyshare.EditPageFakeActivity;
import cn.sharesdk.onekeyshare.PicViewer;
import cn.sharesdk.onekeyshare.ShareCore;

/**
 * Photo-text Sharing will be handling in this page
 * <p>
 * note:
 * wechat, yixin, qzone, etc. are shared in their clients, not in this page
 */
public class EditPage extends EditPageFakeActivity implements OnClickListener, TextWatcher {
  private static final int MAX_TEXT_COUNT = 500;
  private static final int DIM_COLOR = 0x7f323232;
  private RelativeLayout rlPage;
  private TitleLayout llTitle;
  private LinearLayout llBody;
  private RelativeLayout rlThumb;
  // share content editor
  private EditText etContent;
  // Words counter
  private TextView tvCounter;
  // the pin
  private ImageView ivPin;
  // the image info of share image
  private ImageInfo imgInfo;
  // shared image container
  private ImageView ivImage;
  private ProgressBar progressBar;
  private Bitmap image;
  private LinearLayout llPlat;
  //	private LinearLayout llAt;
  private View[] views;
  private Drawable background;

  private Platform[] platformList;

  public void setActivity(Activity activity) {
    super.setActivity(activity);
    Window win = activity.getWindow();
    int orientation = activity.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
      win.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
          | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    } else {
      win.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
          | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    }
  }

  public void onCreate() {
    if (shareParamMap == null || platforms == null || platforms.size() < 1) {
      finish();
      return;
    }

    genBackground();
    activity.setContentView(getPageView());
    onTextChanged(etContent.getText(), 0, etContent.length(), 0);
    showThumb();

    // requests platform list and remove platforms share in their clients
    new Thread() {
      public void run() {
        try {
          platformList = ShareSDK.getPlatformList();
          if (platformList == null) {
            return;
          }

          ArrayList<Platform> list = new ArrayList<Platform>();
          for (Platform plat : platformList) {
            String name = plat.getName();
            if ((plat instanceof CustomPlatform) || ShareCore.isUseClientToShare(name)) {
              continue;
            }
            list.add(plat);
          }
          platformList = new Platform[list.size()];
          for (int i = 0; i < platformList.length; i++) {
            platformList[i] = list.get(i);
          }

          UIHandler.sendEmptyMessage(1, new Callback() {
            public boolean handleMessage(Message msg) {
              afterPlatformListGot();
              return false;
            }
          });
        } catch (Throwable t) {
          t.printStackTrace();
        }
      }
    }.start();
  }

  private RelativeLayout getPageView() {
    rlPage = new RelativeLayout(getContext());
    rlPage.setBackgroundDrawable(background);
    if (dialogMode) {
      RelativeLayout rlDialog = new RelativeLayout(getContext());
      rlDialog.setBackgroundColor(0xc0323232);
      int dp_8 = dipToPx(getContext(), 8);
      int width = getScreenWidth(getContext()) - dp_8 * 2;
      RelativeLayout.LayoutParams lpDialog =
          new RelativeLayout.LayoutParams(width, LayoutParams.WRAP_CONTENT);
      lpDialog.topMargin = dp_8;
      lpDialog.bottomMargin = dp_8;
      lpDialog.addRule(RelativeLayout.CENTER_IN_PARENT);
      rlDialog.setLayoutParams(lpDialog);
      rlPage.addView(rlDialog);

      rlDialog.addView(getPageTitle());
      rlDialog.addView(getPageBody());
      rlDialog.addView(getImagePin());
    } else {
      rlPage.addView(getPageTitle());
      rlPage.addView(getPageBody());
      rlPage.addView(getImagePin());
    }
    return rlPage;
  }

  // title bar
  private TitleLayout getPageTitle() {
    llTitle = new TitleLayout(getContext());
    llTitle.setId(1);
    //		int resId = getBitmapRes(activity, "title_back");
    //		if (resId > 0) {
    //			llTitle.setBackgroundResource(resId);
    //		}
    llTitle.getBtnBack().setOnClickListener(this);
    int resId = getStringRes(activity, "multi_share");
    if (resId > 0) {
      llTitle.getTvTitle().setText(resId);
    }
    llTitle.getBtnRight().setVisibility(View.VISIBLE);
    resId = getStringRes(activity, "share");
    if (resId > 0) {
      llTitle.getBtnRight().setText(resId);
    }
    llTitle.getBtnRight().setOnClickListener(this);
    RelativeLayout.LayoutParams lp =
        new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    llTitle.setLayoutParams(lp);

    return llTitle;
  }

  // page body
  private LinearLayout getPageBody() {
    llBody = new LinearLayout(getContext());
    llBody.setId(2);
    int resId = getBitmapRes(activity, "edittext_back");
    if (resId > 0) {
      llBody.setBackgroundResource(resId);
    }
    llBody.setOrientation(LinearLayout.VERTICAL);
    RelativeLayout.LayoutParams lpBody =
        new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpBody.addRule(RelativeLayout.ALIGN_LEFT, llTitle.getId());
    lpBody.addRule(RelativeLayout.BELOW, llTitle.getId());
    lpBody.addRule(RelativeLayout.ALIGN_RIGHT, llTitle.getId());
    if (!dialogMode) {
      lpBody.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    }
    int dp_3 = dipToPx(getContext(), 3);
    lpBody.setMargins(dp_3, dp_3, dp_3, dp_3);
    llBody.setLayoutParams(lpBody);

    llBody.addView(getMainBody());
    llBody.addView(getSep());
    llBody.addView(getPlatformList());

    return llBody;
  }

  private LinearLayout getMainBody() {
    LinearLayout llMainBody = new LinearLayout(getContext());
    llMainBody.setOrientation(LinearLayout.VERTICAL);
    LayoutParams lpMain = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    lpMain.weight = 1;
    int dp_4 = dipToPx(getContext(), 4);
    lpMain.setMargins(dp_4, dp_4, dp_4, dp_4);
    llMainBody.setLayoutParams(lpMain);

    LinearLayout llContent = new LinearLayout(getContext());
    LayoutParams lpContent = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    lpContent.weight = 1;
    llMainBody.addView(llContent, lpContent);

    // share content editor
    etContent = new EditText(getContext());
    etContent.setGravity(Gravity.LEFT | Gravity.TOP);
    etContent.setBackgroundDrawable(null);
    etContent.setText(String.valueOf(shareParamMap.get("text")));
    etContent.addTextChangedListener(this);
    LayoutParams lpEt = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpEt.weight = 1;
    etContent.setLayoutParams(lpEt);
    llContent.addView(etContent);

    llContent.addView(getThumbView());
    llMainBody.addView(getBodyBottom());

    return llMainBody;
  }

  // shared image container
  private RelativeLayout getThumbView() {
    rlThumb = new RelativeLayout(getContext());
    rlThumb.setId(1);
    int dp_82 = dipToPx(getContext(), 82);
    int dp_98 = dipToPx(getContext(), 98);
    LayoutParams lpThumb = new LayoutParams(dp_82, dp_98);
    rlThumb.setLayoutParams(lpThumb);

    ivImage = new ImageView(getContext());
    int resId = getBitmapRes(activity, "btn_back_nor");
    if (resId > 0) {
      ivImage.setBackgroundResource(resId);
    }
    ivImage.setScaleType(ScaleType.CENTER_INSIDE);
    ivImage.setImageBitmap(image);

    int dp_4 = dipToPx(getContext(), 4);
    ivImage.setPadding(dp_4, dp_4, dp_4, dp_4);
    int dp_74 = dipToPx(getContext(), 74);
    RelativeLayout.LayoutParams lpImage = new RelativeLayout.LayoutParams(dp_74, dp_74);
    int dp_16 = dipToPx(getContext(), 16);
    int dp_8 = dipToPx(getContext(), 8);
    lpImage.setMargins(0, dp_16, dp_8, 0);
    ivImage.setLayoutParams(lpImage);
    ivImage.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        if (image != null && !image.isRecycled()) {
          PicViewer pv = new PicViewer();
          pv.setImageBitmap(image);
          pv.show(activity, null);
        }
      }
    });
    rlThumb.addView(ivImage);

    int dp_24 = dipToPx(getContext(), 24);
    progressBar = new ProgressBar(getContext());
    progressBar.setPadding(dp_24, dp_24, dp_24, dp_24);
    RelativeLayout.LayoutParams pb = new RelativeLayout.LayoutParams(dp_74, dp_74);
    pb.setMargins(0, dp_16, dp_8, 0);
    progressBar.setLayoutParams(pb);
    rlThumb.addView(progressBar);

    Button btn = new Button(getContext());
    btn.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        // remove the photo to share
        rlThumb.setVisibility(View.GONE);
        ivPin.setVisibility(View.GONE);
        removeImage(imgInfo);
      }
    });
    resId = getBitmapRes(activity, "img_cancel");
    if (resId > 0) {
      btn.setBackgroundResource(resId);
    }
    int dp_20 = dipToPx(getContext(), 20);
    RelativeLayout.LayoutParams lpBtn = new RelativeLayout.LayoutParams(dp_20, dp_20);
    lpBtn.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    lpBtn.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    btn.setLayoutParams(lpBtn);
    rlThumb.addView(btn);

    if (!haveImage()) {
      rlThumb.setVisibility(View.GONE);
    }
    return rlThumb;
  }

  private void showThumb() {
    initImageList(new ImageListResultsCallback() {
      @Override public void onFinish(ArrayList<ImageInfo> results) {
        if (results == null || results.size() == 0) return;
        //TODO: 支持多图
        imgInfo = results.get(0);
        image = imgInfo.bitmap;
        rlThumb.setVisibility(View.VISIBLE);
        ivPin.setVisibility(View.VISIBLE);
        progressBar.setVisibility(View.GONE);
        ivImage.setImageBitmap(image);
      }
    });
  }

  private LinearLayout getBodyBottom() {
    LinearLayout llBottom = new LinearLayout(getContext());
    llBottom.setLayoutParams(
        new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

    LinearLayout line = getAtLine(platforms.get(0).getName());
    if (line != null) {
      llBottom.addView(line);
    }

    // Words counter
    tvCounter = new TextView(getContext());
    tvCounter.setText(String.valueOf(MAX_TEXT_COUNT));
    tvCounter.setTextColor(0xffcfcfcf);
    tvCounter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    tvCounter.setTypeface(Typeface.DEFAULT_BOLD);
    LayoutParams lpCounter = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpCounter.gravity = Gravity.CENTER_VERTICAL;
    tvCounter.setLayoutParams(lpCounter);
    llBottom.addView(tvCounter);

    return llBottom;
  }

  // if platform selected form platform gridview is SinaWeibo,
  // TencentWeibo, Facebook, or Twitter, there will be a button
  // in the left-bottom of the page, which provides At-friends function
  private LinearLayout getAtLine(String platform) {
    if (!isShowAtUserLayout(platform)) {
      return null;
    }
    LinearLayout llAt = new LinearLayout(getContext());
    LayoutParams lpAt = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpAt.rightMargin = dipToPx(getContext(), 4);
    lpAt.gravity = Gravity.LEFT | Gravity.BOTTOM;
    lpAt.weight = 1;
    llAt.setLayoutParams(lpAt);
    llAt.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        FollowListPage subPage = new FollowListPage();
        subPage.setPlatform(platforms.get(0));
        subPage.showForResult(activity, null, EditPage.this);
      }
    });

    TextView tvAt = new TextView(getContext());
    int resId = getBitmapRes(activity, "btn_back_nor");
    if (resId > 0) {
      tvAt.setBackgroundResource(resId);
    }
    int dp_32 = dipToPx(getContext(), 32);
    tvAt.setLayoutParams(new LayoutParams(dp_32, dp_32));
    tvAt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    tvAt.setText(getAtUserButtonText(platform));
    int dp_2 = dipToPx(getContext(), 2);
    tvAt.setPadding(0, 0, 0, dp_2);
    tvAt.setTypeface(Typeface.DEFAULT_BOLD);
    tvAt.setTextColor(0xff000000);
    tvAt.setGravity(Gravity.CENTER);
    llAt.addView(tvAt);

    TextView tvName = new TextView(getContext());
    tvName.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    tvName.setTextColor(0xff000000);
    resId = getStringRes(activity, "list_friends");
    String text = getContext().getString(resId, getName(platform));
    tvName.setText(text);
    LayoutParams lpName = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpName.gravity = Gravity.CENTER_VERTICAL;
    tvName.setLayoutParams(lpName);
    llAt.addView(tvName);

    return llAt;
  }

  private View getSep() {
    View vSep = new View(getContext());
    vSep.setBackgroundColor(0xff000000);
    int dp_1 = dipToPx(getContext(), 1);
    LayoutParams lpSep = new LayoutParams(LayoutParams.MATCH_PARENT, dp_1);
    vSep.setLayoutParams(lpSep);
    return vSep;
  }

  // platform logos
  private LinearLayout getPlatformList() {
    LinearLayout llToolBar = new LinearLayout(getContext());
    LayoutParams lpTb = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    llToolBar.setLayoutParams(lpTb);

    TextView tvShareTo = new TextView(getContext());
    int resId = getStringRes(activity, "share_to");
    if (resId > 0) {
      tvShareTo.setText(resId);
    }
    tvShareTo.setTextColor(0xffcfcfcf);
    tvShareTo.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    int dp_9 = dipToPx(getContext(), 9);
    LayoutParams lpShareTo = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpShareTo.gravity = Gravity.CENTER_VERTICAL;
    lpShareTo.setMargins(dp_9, 0, 0, 0);
    tvShareTo.setLayoutParams(lpShareTo);
    llToolBar.addView(tvShareTo);

    HorizontalScrollView sv = new HorizontalScrollView(getContext());
    sv.setHorizontalScrollBarEnabled(false);
    sv.setHorizontalFadingEdgeEnabled(false);
    LayoutParams lpSv = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lpSv.setMargins(dp_9, dp_9, dp_9, dp_9);
    sv.setLayoutParams(lpSv);
    llToolBar.addView(sv);

    llPlat = new LinearLayout(getContext());
    llPlat.setLayoutParams(new HorizontalScrollView.LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.MATCH_PARENT));
    sv.addView(llPlat);

    return llToolBar;
  }

  // the pin
  private ImageView getImagePin() {
    ivPin = new ImageView(getContext());
    int resId = getBitmapRes(activity, "pin");
    if (resId > 0) {
      ivPin.setImageResource(resId);
    }
    int dp_80 = dipToPx(getContext(), 80);
    int dp_36 = dipToPx(getContext(), 36);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(dp_80, dp_36);
    lp.topMargin = dipToPx(getContext(), 6);
    lp.addRule(RelativeLayout.ALIGN_TOP, llBody.getId());
    lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    ivPin.setLayoutParams(lp);
    ivPin.setVisibility(View.GONE);

    return ivPin;
  }

  private void genBackground() {
    background = new ColorDrawable(DIM_COLOR);
    if (backgroundView != null) {
      try {
        Bitmap bgBm =
            captureView(backgroundView, backgroundView.getWidth(), backgroundView.getHeight());
        bgBm = blur(bgBm, 20, 8);
        BitmapDrawable blurBm = new BitmapDrawable(activity.getResources(), bgBm);
        background = new LayerDrawable(new Drawable[] { blurBm, background });
      } catch (Throwable e) {
        e.printStackTrace();
      }
    }
  }

  private String getName(String platform) {
    if (platform == null) {
      return "";
    }

    int resId = getStringRes(getContext(), platform.toLowerCase());
    return getContext().getString(resId);
  }

  public void onClick(View v) {
    if (v.equals(llTitle.getBtnBack())) {
      Platform plat = null;
      for (int i = 0; i < views.length; i++) {
        if (views[i].getVisibility() == View.INVISIBLE) {
          plat = platformList[i];
          break;
        }
      }

      // a statistics of Cancel-sharing
      if (plat != null) {
        ShareSDK.logDemoEvent(5, plat);
      }
      finish();
      return;
    }

    if (v.equals(llTitle.getBtnRight())) {
      String text = etContent.getText().toString();
      shareParamMap.put("text", text);

      platforms.clear();
      for (int i = 0; i < views.length; i++) {
        if (views[i].getVisibility() != View.VISIBLE) {
          platforms.add(platformList[i]);
        }
      }

      if (platforms.size() > 0) {
        setResultAndFinish();
      } else {
        int resId = getStringRes(activity, "select_one_plat_at_least");
        if (resId > 0) {
          Toast.makeText(getContext(), resId, Toast.LENGTH_SHORT).show();
        }
      }
      return;
    }

    if (v instanceof FrameLayout) {
      ((FrameLayout) v).getChildAt(1).performClick();
      return;
    }

    if (v.getVisibility() == View.INVISIBLE) {
      v.setVisibility(View.VISIBLE);
    } else {
      v.setVisibility(View.INVISIBLE);
    }
  }

  /** display platform list */
  public void afterPlatformListGot() {
    int size = platformList == null ? 0 : platformList.length;
    views = new View[size];

    final int dp_24 = dipToPx(getContext(), 24);
    LayoutParams lpItem = new LayoutParams(dp_24, dp_24);
    final int dp_9 = dipToPx(getContext(), 9);
    lpItem.setMargins(0, 0, dp_9, 0);
    FrameLayout.LayoutParams lpMask =
        new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    lpMask.gravity = Gravity.LEFT | Gravity.TOP;
    int selection = 0;
    for (int i = 0; i < size; i++) {
      FrameLayout fl = new FrameLayout(getContext());
      fl.setLayoutParams(lpItem);
      if (i >= size - 1) {
        fl.setLayoutParams(new LayoutParams(dp_24, dp_24));
      }
      llPlat.addView(fl);
      fl.setOnClickListener(this);

      ImageView iv = new ImageView(getContext());
      iv.setScaleType(ScaleType.CENTER_INSIDE);
      iv.setImageBitmap(getPlatLogo(platformList[i]));
      iv.setLayoutParams(
          new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
      fl.addView(iv);

      views[i] = new View(getContext());
      views[i].setBackgroundColor(0xcfffffff);
      views[i].setOnClickListener(this);
      String platformName = platformList[i].getName();
      for (Platform plat : platforms) {
        if (platformName.equals(plat.getName())) {
          views[i].setVisibility(View.INVISIBLE);
          selection = i;
        }
      }
      views[i].setLayoutParams(lpMask);
      fl.addView(views[i]);
    }

    final int postSel = selection;
    UIHandler.sendEmptyMessageDelayed(0, 333, new Callback() {
      public boolean handleMessage(Message msg) {
        HorizontalScrollView hsv = (HorizontalScrollView) llPlat.getParent();
        hsv.scrollTo(postSel * (dp_24 + dp_9), 0);
        return false;
      }
    });
  }

  private Bitmap getPlatLogo(Platform plat) {
    if (plat == null) {
      return null;
    }

    String name = plat.getName();
    if (name == null) {
      return null;
    }

    String resName = "logo_" + plat.getName();
    int resId = getBitmapRes(activity, resName.toLowerCase());
    if (resId > 0) {
      return BitmapFactory.decodeResource(activity.getResources(), resId);
    }
    return null;
  }

  public void beforeTextChanged(CharSequence s, int start, int count, int after) {

  }

  public void onTextChanged(CharSequence s, int start, int before, int count) {
    int remain = MAX_TEXT_COUNT - etContent.length();
    tvCounter.setText(String.valueOf(remain));
    tvCounter.setTextColor(remain > 0 ? 0xffcfcfcf : 0xffff0000);
  }

  public void afterTextChanged(Editable s) {

  }

  public void onResult(HashMap<String, Object> data) {
    String atText = getJoinSelectedUser(data);
    if (atText != null) {
      etContent.append(atText);
    }
  }

  private void hideSoftInput() {
    try {
      InputMethodManager imm =
          (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.hideSoftInputFromWindow(etContent.getWindowToken(), 0);
    } catch (Throwable t) {
      t.printStackTrace();
    }
  }

  public boolean onFinish() {
    hideSoftInput();
    return super.onFinish();
  }

  public void onConfigurationChanged(Configuration newConfig) {
    int orientation = activity.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
      hideSoftInput();
      Window win = activity.getWindow();
      win.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
          | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
      rlPage.setBackgroundColor(DIM_COLOR);
      rlPage.postDelayed(new Runnable() {
        public void run() {
          genBackground();
          rlPage.setBackgroundDrawable(background);
        }
      }, 1000);
    } else {
      hideSoftInput();
      Window win = activity.getWindow();
      win.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
          | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
      rlPage.setBackgroundColor(DIM_COLOR);
      rlPage.postDelayed(new Runnable() {
        public void run() {
          genBackground();
          rlPage.setBackgroundDrawable(background);
        }
      }, 1000);
    }
  }
}
